// aiserve/utils.go
package utils

import (
	"encoding/json"
	"fmt"
	"strings"
	"time"
	models "yuanaiproblem/dao/model"
)

// buildFixedPrompt 构建标准化提示词（匹配Question实体字段）
func BuildFixedPrompt(prompt string) string {
	return prompt + `
请严格返回以下格式的JSON数组, 无任何多余内容:
[
  {
    "id": 递增,
    "content": "题目内容（映射到Title字段）",
    "options": ["A. 选项1", "B. 选项2"], // 映射到Options字段
    "answer": "AB", // 映射到Answer字段
    "analysis": "解析内容（映射到Explanation字段，换行用\\n表示）"
  }
]
`
}

// parseAndMapResponse 解析API响应并映射为Question实体（关键适配）
func ParseAndMapResponse(content, model string, userId int32) ([]models.Question, error) {
	// 净化JSON内容
	cleanedContent := strings.TrimSpace(content)
	cleanedContent = strings.TrimPrefix(cleanedContent, "```json")
	cleanedContent = strings.TrimSuffix(cleanedContent, "```")
	cleanedContent = strings.ReplaceAll(cleanedContent, "\r\n", "")
	cleanedContent = strings.ReplaceAll(cleanedContent, "\n", "")

	// 解析为临时结构体（匹配JSON格式）
	type tempQuestion struct {
		ID       int      `json:"id"`
		Content  string   `json:"content"`  // 对应JSON的content
		Options  []string `json:"options"`  // 对应JSON的options
		Answer   string   `json:"answer"`   // 对应JSON的answer
		Analysis string   `json:"analysis"` // 对应JSON的analysis
	}
	var tempQuestions []tempQuestion
	if err := json.Unmarshal([]byte(cleanedContent), &tempQuestions); err != nil {
		return nil, fmt.Errorf("JSON解析失败: %w, 净化后内容: %s", err, cleanedContent)
	}

	// 映射到Question实体（关键：字段一一对应）
	now := time.Now()
	questions := make([]models.Question, len(tempQuestions))
	for i, tq := range tempQuestions {
		// 将tq.option序列化
		optionsJSON, err := json.Marshal(tq.Options)
		if err != nil {
			return nil, fmt.Errorf("序列化选项失败: %w", err)
		}
		questions[i] = models.Question{

			// ID: 数据库自增，此处不设置（由数据库生成）
			Title:        tq.Content,                     // JSON的content -> Question.Title
			QuestionType: "multiple",                     // 默认为多选题
			Options:      models.JSONString(optionsJSON), // JSON的options -> Question.Options（需适配JSONString类型）
			Answer:       tq.Answer,                      // JSON的answer -> Question.Answer
			Explanation:  tq.Analysis,                    // JSON的analysis -> Question.Explanation
			Language:     "zh-CN",                        // 固定值（可扩展为配置）
			AiModel:      model,                          // 模型名称（从配置获取）
			UserID:       userId,                         // 创建者ID
			CreatedAt:    now,
			UpdatedAt:    now,
		}
	}
	return questions, nil
}

// adjustQuestionCount 调整题目数量以匹配需求
func AdjustQuestionCount(questions []models.Question, count int) []models.Question {
	if len(questions) < count {
		return questions // 数量不足时返回全部
	}
	return questions[:count] // 数量过多时截断
}
